//package com.zhihuiyanche.common.util;
//
//import java.io.BufferedInputStream;
//import java.io.File;
//import java.io.FileOutputStream;
//import java.io.UnsupportedEncodingException;
//import java.net.HttpURLConnection;
//import java.net.URL;
//import java.security.MessageDigest;
//import java.security.NoSuchAlgorithmException;
//import java.util.Formatter;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.UUID;
//
//import org.codehaus.jackson.JsonNode;
//
///**
// * 第三方
// * 只需要更改获取到jsapi_ticket的调用方法
// * 微信js-sdk相关方法，主要用于和前端页面交互
// * 
// * @author zjf
// *
// */
//public class WXThridFront
//{
//	/**
//	 * 返回给前台的校验数据，暂时用，分隔。
//	 * 
//	 * @param url
//	 * @return
//	 */
//	public static String getSignatureString(String url, String tenantId)
//	{
//		Map<String, String> map = sign(url, tenantId);
//		String result = "";
//		result = map.get("appId") + "," + map.get("nonceStr") + "," + map.get("timestamp") + "," + map.get("signature") + "," + map.get("jsapi_ticket") + "," + map.get("url");
//		return result;
//	}
//
//	/**
//	 * js-jdk后台验证方法，根据页面url进行验证
//	 * 
//	 * @param url
//	 *            前台页面的url 前台完整的url 可按下面方法获取 String url =
//	 *            httpRequest.getRequestURL().toString();
//	 *            if(httpRequest.getQueryString()!=null) { url=
//	 *            url+"?"+httpRequest.getQueryString(); }
//	 *            httpRequest.setAttribute("url",url);
//	 * @return
//	 */
//	public static Map<String, String> sign(String url, String tenantId)
//	{
//		// 获取凭证
//		String ticket = getJsapi(tenantId);
//		Map<String, String> ret = new HashMap<String, String>();
//		String nonce_str = create_nonce_str();
//		String timestamp = create_timestamp();
//		String string1;
//		String signature = "";
//
//		// 注意这里参数名必须全部小写，且必须有序
//		string1 = "jsapi_ticket=" + ticket + "&noncestr=" + nonce_str + "&timestamp=" + timestamp + "&url=" + url;
//		try
//		{
//			MessageDigest crypt = MessageDigest.getInstance("SHA-1");
//			crypt.reset();
//			crypt.update(string1.getBytes("UTF-8"));
//			signature = byteToHex(crypt.digest());
//		}
//		catch (NoSuchAlgorithmException e)
//		{
//			e.printStackTrace();
//		}
//		catch (UnsupportedEncodingException e)
//		{
//			e.printStackTrace();
//		}
//
//		ret.put("url", url);
//		ret.put("jsapi_ticket", ticket);
//		ret.put("nonceStr", nonce_str);
//		ret.put("timestamp", timestamp);
//		ret.put("signature", signature);
//		ret.put("appId", WXConfig.getAppId(tenantId));
//
//		return ret;
//	}
//
//	private static String byteToHex(final byte[] hash)
//	{
//		Formatter formatter = new Formatter();
//		for (byte b : hash)
//		{
//			formatter.format("%02x", b);
//		}
//		String result = formatter.toString();
//		formatter.close();
//		return result;
//	}
//
//	private static String create_nonce_str()
//	{
//		return UUID.randomUUID().toString();
//	}
//
//	private static String create_timestamp()
//	{
//		return Long.toString(System.currentTimeMillis() / 1000);
//	}
//
//	/**
//	 * 获取ticket 每隔一小时获取一次。暂时为手动获取，缓存到内存。
//	 * 
//	 * @return
//	 */
//	public static String getJsapi(String tenantId)
//	{
//		//从数据库中获取jsapi_ticket（有效时间2小时）
////		JSONObject json = WXThridConfig.getConfigBean(tenantId);
////		if(json.getString("jsapi_ticket")!=null
////				&&json.getString("jsapi_ticket").length()>0
////				&& json.containsKey("jsapi_ticket_time")
////				&&json.getString("jsapi_ticket_time").length()>0){
////			String jsapi_ticket = json.getString("jsapi_ticket");
////			Long ticket_createTime = json.getLong("jsapi_ticket_time");
////			// 如果ticket不为空
////			if (jsapi_ticket != null && (new Date().getTime() - ticket_createTime) < 3600000)
////			{
////				// 如果时间在1一个小时之内
////				return jsapi_ticket;
////			}
////		}
//		String key=tenantId+"jsapi_ticket";
//		String jsapi_ticket=(String) FromRedisUtil.getComponentTicket(key);
//		if(null!=jsapi_ticket&&jsapi_ticket.length()>0){
//			return jsapi_ticket;
//		}
//		return getNewJsapi(tenantId);
//
//	}
//
//	/**
//	 * 第三方获取是使用
//	 * 获取ticket 每隔一小时获取一次。暂时为手动获取，缓存到内存。
//	 * 
//	 * @return
//	 */
//	public static String getNewJsapi(String tenantId)
//	{
//		// 获取ticket
//		String jsapi_ticket = "";
//		// 获取token
//		String token=WXThridUtil.getAccessToken(tenantId);
//		String url = "http://api.weixin.qq.com/cgi-bin/ticket/getticket";
//		Map<String, String> map = new HashMap<String, String>();
//		map.put("type", "jsapi");
//		map.put("access_token", token);
//
//		JsonNode rootNode = WXUtil.sendHttpRequest(url, map);
//
//		JsonNode ticketNode = rootNode.findValue("ticket");
//		if (ticketNode != null)
//		{
//			jsapi_ticket = ticketNode.getTextValue();
//			String key=tenantId+"jsapi_ticket";
//			RedisTemplateDao redisTemplateDao = (RedisTemplateDao) SpringConext.getApplicationContext().getBean(RedisTemplateDao.NAME);
//			redisTemplateDao.set(key, jsapi_ticket);
//			redisTemplateDao.expire(key, 2*60*60l);
//		}
////		JSONObject json = new JSONObject();
////		json.put("jsapi_ticket", jsapi_ticket);
////		json.put("jsapi_ticket_time", new Date().getTime());
////		WXConfig.updateConfigBean(tenantId, json);
//		return jsapi_ticket;
//
//	}
//
//	/**
//	 * 图片下载。先在页面通过js-sdk接口上传到微信服务器，再根据返回的mediaId去服务器上下载到本地
//	 * 
//	 * @param mediaId
//	 * @param savePath
//	 * @return
//	 */
//	public static String downloadMedia(String mediaId, String savePath, String tenantId) throws Exception
//	{
//		// access_token
////		String token = WXUtil.getAccessToken(tenantId);
//		String token=WXThridUtil.getAccessToken(tenantId);
//		// 获取项目存放图片的路径
//		String allPath = new WXThridUtil().getClass().getResource("/").getPath();
//		String root = allPath.substring(0, allPath.indexOf("WEB-INF"));
//		// 路径名 按时间情况而定
//		String filePath = root + savePath;// "attchment/" +mediaId + ".jpg";
//		// 拼接请求地址
//		String requestUrl = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID";
//		requestUrl = requestUrl.replace("ACCESS_TOKEN", token).replace("MEDIA_ID", mediaId);
//		try
//		{
//			URL url = new URL(requestUrl);
//			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//			conn.setDoInput(true);
//			conn.setRequestMethod("GET");
//
//			int resultLength = conn.getContentLength();
//
//			// 如果返回文本的长度小于120，则认为是access_token失效。
//			if (resultLength < 120)
//			{
//				// 重新获取access_token
////				token = WXUtil.getNewAccessToken(tenantId);
//				token=WXThridUtil.getNewAccessToken(tenantId);
//				System.out.println("access_token 重新获取:" + token);
//				// 断开上一次连接
//				conn.disconnect();
//				requestUrl = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID";
//				requestUrl = requestUrl.replace("ACCESS_TOKEN", token).replace("MEDIA_ID", mediaId);
//				url = new URL(requestUrl);
//				conn = (HttpURLConnection) url.openConnection();
//				conn.setDoInput(true);
//				conn.setRequestMethod("GET");
//				resultLength = conn.getContentLength();
//				// 再一次获取返回的文本
//				if (resultLength < 120)
//				{
//					// 如果还失败，说明是mediaId失效 则
//					return "error";
//				}
//			}
//
//			BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
//			FileOutputStream fos = new FileOutputStream(new File(filePath));
//			byte[] buf = new byte[8096];
//			int size = 0;
//			while ((size = bis.read(buf)) != -1)
//				fos.write(buf, 0, size);
//			fos.close();
//			bis.close();
//
//			conn.disconnect();
//			String info = String.format("下载媒体文件成功，filePath=" + filePath);
//		}
//		catch (Exception e)
//		{
//			filePath = null;
//			String error = String.format("下载媒体文件失败：%s", e);
//		}
//		return filePath;
//	}
//	public static void main(String[] args) {
//		String newJsapi = getNewJsapi("zhengzhouzisu");
//		System.out.println("newJsapi:"+newJsapi);
//	}
//}
